package com.hanxiaozhang.config.handler;

import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
import com.hanxiaozhang.context.TenantContext;
import org.apache.commons.lang3.StringUtils;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * 〈一句话功能简述〉<br>
 * 〈动态修改表名〉
 *
 * @author hanxinghua
 * @create 2025/6/18
 * @since 1.0.0
 */
public class TenantTableIsolateHandler implements TableNameHandler {

    // 需要替换的表名（这些表需要按租户隔离） todo 修改从缓存中获取
    private static final Set<String> TENANT_TABLES = new HashSet<>(Arrays.asList(
            "user", "order", "product"
    ));

    @Override
    public String dynamicTableName(String sql, String tableName) {

        // 获取当前租户ID
        String tenantId = TenantContext.getCurrentTenant();

        // 从@Tenant主键获取 todo

        if (StringUtils.isNotBlank(tenantId)) {
            // 只处理需要多租户隔离的表
            if (TENANT_TABLES.contains(tableName.toLowerCase())) {
                return tableName + "_" + tenantId;
            }
        }

        return tableName;
    }
}